﻿''' <summary>
''' ユーザーリスト画面のフォームです。
''' </summary>
''' <remarks></remarks>
Friend NotInheritable Class UserList

#Region " プライベートフィールド "
  Private ReadOnly groupListBox As ListBox
  Private ReadOnly userBindingSource As BindingSource
#End Region

#Region " パブリックコンストラクター "
  ''' <summary>
  ''' UserList クラスの新しいインスタンスを初期化します。
  ''' </summary>
  ''' <remarks></remarks>
  Public Sub New()
    ' この呼び出しはデザイナーで必要です。
    InitializeComponent()
    ' InitializeComponent() 呼び出しの後で初期化を追加します。

    Dim users As IEnumerable(Of IUser)     'ユーザーのリスト
    If DirectoryAccess.CanConnectDomain Then  'ドメインに接続できる時
      users = DirectoryAccess.GetUsers(Of DomainUser)()   'ユーザーを取得
      userBindingSource = Me.DomainUserBindingSource
      groupListBox = Me.DomainGroupListBox
      Me.LocalPanel.Visible = False
    Else  'ドメインに接続できない時
      users = DirectoryAccess.GetUsers(Of LocalUser)()  'ユーザーを取得
      userBindingSource = Me.LocalUserBindingSource
      groupListBox = Me.LocalGroupListBox
      Me.DomainPanel.Visible = False
      Me.UserListBox.Height -= 32
      Me.Height -= 100
    End If
    userBindingSource.DataSource = users
    Me.UserListBox.DataSource = userBindingSource

    Me.CountLabel.Text = String.Format("{0} 個のオブジェクト", userBindingSource.Count)
    Me.GroupButton.Enabled = TypeOf userBindingSource.Current Is DomainUser
  End Sub
#End Region

#Region " イベントハンドラ "
  Private Sub UserListBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles UserListBox.SelectedIndexChanged
    If Me.UserListBox.SelectedIndex = -1 Then
      Return
    End If

    Me.ShowBelongGroups()   '所属するグループを表示
  End Sub

  Private Sub GroupButton_Click(sender As Object, e As EventArgs) Handles GroupButton.Click
    Dim user = DirectCast(userBindingSource.Current, DomainUser)  '選択されたユーザー
    Using fm As New InRoleGroupList(user)
      fm.ShowDialog(Me)
    End Using
  End Sub
#End Region

#Region " プライベートメソッド "
  ''' <summary>
  ''' 所属するグループを表示します。
  ''' </summary>
  ''' <remarks></remarks>
  Private Sub ShowBelongGroups()
    Dim user = DirectCast(userBindingSource.Current, IUser)   '選択されたユーザー
    Dim groups = DirectoryAccess.GetBelongGroups(user)  'ユーザーの所属するグループを取得
    groupListBox.DataSource = groups
  End Sub
#End Region
End Class